#include "ScopeInvokedObj.h"

ScopeInvokedObj::ScopeInvokedObj(int lineNumber,DIVA_VM* vm){
	this->_lineNum = lineNumber;
	this->_vm = vm;
	this->_evt = NULL;
	this->_visible = _vm->get_visible();
}

void ScopeInvokedObj::recover(){
	//NewlyObject只牽涉到顏色變化
	if(this->_evt != NULL){
		if(this->_evt->getName() == "Color_Change"){
			Ogre::Vector4 currentcolor = Ogre::StringConverter::parseVector4(this->_evt->getCurrentValue());
			this->_vm->setColorandTransparency(currentcolor);
		}
		else{
			//should not be wop_change or position_change
			assert(false);
		}
		this->_evt->recover();
		//this->_vm->VMSetVisible(_visible);
	}
}

void ScopeInvokedObj::render(float timeSinceLastFrame){
	//要設計成播放完一個evt然後再放下一個evt,How? Observer pattern ?
	//目前都同時播放
	if(this->_evt != NULL){
		if(!this->_visible){
			this->_vm->VMSetVisible(true);
		}
		if(!this->_evt->checkBounding()){
			this->_evt->writePastValueToVariation();
		}
		if(this->_evt->getName() == "Color_Change"){
			Ogre::Vector4 color = Ogre::StringConverter::parseVector4(this->_evt->getVariation());
			this->_vm->setColorandTransparency(color);
		}
		else{
			assert(false);
		}
	}
}